﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Xml.Linq;
using MySql.Data.MySqlClient;
using MySql.Data.Types;
using System.Data.Sql;
using System.Data.SqlClient;

using System.Collections.Generic;

/// Espacio de nombres para los contenedores
namespace GCon
{

    /// <summary>
    /// Clase contenedora de Profesor
    /// </summary>
    public class Con_Profesor
    {
        /// <summary>
        /// Constructor por defecto
        /// </summary>
        public Con_Profesor()
        {
            
        }

        /// <summary>
        /// Constructor con todos los parametros
        /// </summary>
        public Con_Profesor(String ID_PK, String NOMBRE, String APELLIDO1, String APELLIDO2, String NIF, String DIRECCION,
                String CP, String MAIL, String OBSERVACIONES, String FECHA_CREACION, String TLF1, String TLF2, String CIUDAD_ID_PK, String PROVINCIA_ID_PK)
        {
           this._ID_PK = ID_PK;
           this._NOMBRE = NOMBRE;
           this._APELLIDO1 = APELLIDO1;
           this._APELLIDO2 = APELLIDO2;
           this._NIF = NIF;
           this._DIRECCION = DIRECCION;
           this._CP = CP ;
           this._MAIL =  MAIL;
           this._OBSERVACIONES = OBSERVACIONES;
           this._FECHA_CREACION = FECHA_CREACION;
           this._TLF1 = TLF1;
           this._TLF2 = TLF2;
           this._CIUDAD_ID_PK = CIUDAD_ID_PK;
           this._PROVINCIA_ID_PK = PROVINCIA_ID_PK;
        }

        /// <summary>
        /// Constructor de copia
        /// </summary>
        /// <param name="otro"></param>
        public Con_Profesor(Con_Profesor otro)
        {

            this._ID_PK = otro._ID_PK;
            this._NOMBRE = otro._NOMBRE;
            this._APELLIDO1 = otro._APELLIDO1;
            this._APELLIDO2 = otro._APELLIDO2;
            this._NIF = otro._NIF;
            this._DIRECCION = otro._DIRECCION;
            this._CP = otro._CP;
            this._MAIL = otro._MAIL;
            this._OBSERVACIONES = otro._OBSERVACIONES;
            this._FECHA_CREACION = otro._FECHA_CREACION;
            this._TLF1 = otro._TLF1;
            this._TLF2 = otro._TLF2;
            this._CIUDAD_ID_PK = otro._CIUDAD_ID_PK;
            this._PROVINCIA_ID_PK = otro._PROVINCIA_ID_PK;
        
        }

        public void CargaProfesor(int IdProfesor)
        {
            MySqlConnection oConexion;
            MySqlDataAdapter oAdaptador;
            DataSet ds;
            String llamada;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";
            oConexion.Open();

            llamada = "CALL CargaProfesor ( '" + IdProfesor + "' );";
            oAdaptador = new MySqlDataAdapter(llamada, oConexion);
            ds = new DataSet();
            oAdaptador.Fill(ds, "Tabla");

            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                this._ID_PK = dr["PROFESOR_ID_PK"].ToString();
                this._NOMBRE = dr["PROFESOR_NOMBRE"].ToString();
                this._APELLIDO1 = dr["PROFESOR_APELLIDO1"].ToString();
                this._APELLIDO2 = dr["PROFESOR_APELLIDO2"].ToString();
                this._NIF = dr["PROFESOR_NIF"].ToString();
                this._DIRECCION = dr["PROFESOR_DIRECCION"].ToString();
                this._CP = dr["PROFESOR_CP"].ToString();
                this._MAIL = dr["PROFESOR_MAIL"].ToString();
                this._OBSERVACIONES = dr["PROFESOR_OBSERVACIONES"].ToString();
                this._FECHA_CREACION = dr["PROFESOR_FECHA_CREACION"].ToString();
                this._TLF1 = dr["PROFESOR_TLF1"].ToString();
                this._TLF2 = dr["PROFESOR_TLF2"].ToString();
                this._CIUDAD_ID_PK = dr["CIUDAD_ID_PK"].ToString();
                this._PROVINCIA_ID_PK = dr["PROVINCIA_ID_PK"].ToString();
                
            }

            oConexion.Close();
        }

        /// <summary>
        /// Procedimiento de inserción.
        /// Inserta en la BBDD un Profesor.
        /// </summary>
        public void InsertaProfesor()
        {
            MySqlConnection oConexion;
            MySqlCommand oComando;
            String llamada;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";

            llamada = "CALL InsertaProfesor ( '" + this._NOMBRE + "','" + this._APELLIDO1 + "','" + this._APELLIDO2 + "','"
                                            + this._NIF + "','" + this._DIRECCION + "','" + this._CP
                                            + "','" + this._MAIL + "','" + this._OBSERVACIONES + "','" + this._FECHA_CREACION
                                            + "','" + this._TLF1 + "','" + this._TLF2 + "','" + this._CIUDAD_ID_PK + "','" + this._PROVINCIA_ID_PK
                                            + "' );";
            oComando = new MySqlCommand(llamada, oConexion);

            oConexion.Open();
            oComando.ExecuteReader();

            oConexion.Close();
        }

        /// <summary>
        /// Procedimiento de modificación.
        /// Modifica en la BBDD un Profesor.
        /// </summary>
        public void ModificaProfesor()
        {
            MySqlConnection oConexion;
            MySqlCommand oComando;
            String llamada;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";

            llamada = "CALL ModificaProfesor ( '" + this._ID_PK + "','" + this._NOMBRE + "','" + this._APELLIDO1 + "','" + this._APELLIDO2 + "','"
                                            + this._NIF + "','" + this._DIRECCION + "','" + this._CP
                                            + "','" + this._MAIL + "','" + this._OBSERVACIONES + "','" + this._FECHA_CREACION
                                            + "','" + this._TLF1 + "','" + this._TLF2 + "','" + this._CIUDAD_ID_PK
                                            + "','" + this._PROVINCIA_ID_PK + "' );";
            oComando = new MySqlCommand(llamada, oConexion);

            oConexion.Open();
            oComando.ExecuteReader();

            oConexion.Close();
        }

        /// <summary>
        /// Procedimiento de eliminación.
        /// Elimina de la BBDD un Profesor.
        /// </summary>
        public void EliminaProfesor()
        {
            MySqlConnection oConexion;
            MySqlCommand oComando;
            String llamada;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";

            llamada = "CALL EliminaProfesor ( '" + this._ID_PK + "' );";
            oComando = new MySqlCommand(llamada, oConexion);

            oConexion.Open();
            oComando.ExecuteReader();

            oConexion.Close();
        }

        /// <summary>
        /// Procedimiento de asignacion de asignatura a profesor.
        /// Mete una asignatura de la BBDD a un profesor.
        /// </summary>
        public void AsignaAsignaturaAprofesor(String idAsignatura)
        {
            MySqlConnection oConexion;
            MySqlCommand oComando;
            String llamada;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";

            llamada = "CALL AsignaAsignaturaAprofesor ( '" + this._ID_PK + "," + idAsignatura + "' );";
            oComando = new MySqlCommand(llamada, oConexion);

            oConexion.Open();
            oComando.ExecuteReader();

            oConexion.Close();
        }

        /// Procedimiento de eliminacion de asignatura a profesor.
        /// Elimina una asignatura de la BBDD a un profesor.
        /// </summary>
        public void EliminarAsignaturaDeProfesor(String idAsignatura)
        {
            MySqlConnection oConexion;
            MySqlCommand oComando;
            String llamada;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";

            llamada = "CALL EliminarAsignaturaDeProfesor ( '" + this._ID_PK + "," + idAsignatura + "' );";
            oComando = new MySqlCommand(llamada, oConexion);

            oConexion.Open();
            oComando.ExecuteReader();

            oConexion.Close();
        }

        public void AsignaturasPorGrupoDeProfesor()
        {
            MySqlConnection oConexion;
            MySqlDataAdapter oAdaptador;
            DataSet ds;
            String llamada;
            Con_Asignatura oAsignatura;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";
            oConexion.Open();

            llamada = "CALL AsignaturasPorGrupoDeProfesor(" + this._ID_PK + ")";
            oAdaptador = new MySqlDataAdapter(llamada, oConexion);
            ds = new DataSet();
            oAdaptador.Fill(ds, "Tabla");

            foreach (DataRow dr in ds.Tables[0].Rows)
            {

                oAsignatura = new Con_Asignatura();
                oAsignatura.Set_ID_PK(dr["ASIGNATURA_ID_PK"].ToString());
                oAsignatura.Set_NOMBRE(dr["ASIGNATURA_NOMBRE"].ToString());
                oAsignatura.Set_ID_GRUPO(dr["GRUPO_ID_PK"].ToString());
                oAsignatura.Set_NOM_GRUPO(dr["GRUPO_NOMBRE"].ToString());
                oAsignatura.Set_COD_GRUPO(dr["GRUPO_CODIGO"].ToString());
                _dAsignaturas.Add(oAsignatura.Get_ID_PK(), oAsignatura);
                oAsignatura = null;

            }

            oConexion.Close();
        }
        /// Getters

        public String Get_ID_PK()
        {
            return this._ID_PK;
        }
        public String Get_NOMBRE()
        {
            return this._NOMBRE;
        }
        public String Get_APELLIDO1()
        {
            return this._APELLIDO1;
        }
        public String Get_APELLIDO2()
        {
            return this._APELLIDO2;
        }
        public String Get_NIF()
        {
            return this._NIF;
        }
        public String Get_DIRECCION()
        {
            return this._DIRECCION;
        }
        public String Get_CP()
        {
            return this._CP;
        }
        public String Get_MAIL()
        {
            return this._MAIL;
        }
        public String Get_OBSERVACIONES()
        {
            return this._OBSERVACIONES;
        }
        public String Get_TLF1()
        {
            return this._TLF1;
        }
        public String Get_TLF2()
        {
            return this._TLF2;
        }
        public String Get_CIUDAD_ID_PK()
        {
            return this._CIUDAD_ID_PK;
        }
        public String Get_PROVINCIA_ID_PK()
        {
            return this._PROVINCIA_ID_PK;
        }
        public String Get_FECHA_CREACION()
        {
            return this._FECHA_CREACION;
        }

        /// Setters

        public void Set_ID_PK(String parametro)
        {
            this._ID_PK = parametro;
        }
        public void Set_NOMBRE(String parametro)
        {
            this._NOMBRE = parametro;
        }
        public void Set_APELLIDO1(String parametro)
        {
            this._APELLIDO1 = parametro;
        }
        public void Set_APELLIDO2(String parametro)
        {
            this._APELLIDO2 = parametro;
        }
        public void Set_NIF(String parametro)
        {
            this._NIF = parametro;
        }
        public void Set_DIRECCION(String parametro)
        {
            this._DIRECCION = parametro;
        }
        public void Set_CP(String parametro)
        {
            this._CP = parametro;
        }
        public void Set_MAIL(String parametro)
        {
            this._MAIL = parametro;
        }
        public void Set_OBSERVACIONES(String parametro)
        {
            this._OBSERVACIONES = parametro;
        }
        public void Set_TLF1(String parametro)
        {
            this._TLF1 = parametro;
        }
        public void Set_TLF2(String parametro)
        {
            this._TLF2 = parametro;
        }
        public void Set_CIUDAD_ID_PK(String parametro)
        {
            this._CIUDAD_ID_PK = parametro;
        }
        public void Set_PROVINCIA_ID_PK(String parametro)
        {
            this._PROVINCIA_ID_PK = parametro;
        }
        public void Set_FECHA_CREACION(String parametro)
        {
            this._FECHA_CREACION = parametro;
        }

        public Con_Asignatura GetAsignatura(String Id)
        {
            return this._dAsignaturas[Id];
        }

        public int cuenta()
        {
            return this._dAsignaturas.Count;
        }
        ///Atributos
        private String _ID_PK;
        private String _NOMBRE;
        private String _APELLIDO1;
        private String _APELLIDO2;
        private String _NIF;
        private String _DIRECCION;
        private String _CP;
        private String _MAIL;
        private String _OBSERVACIONES;
        private String _FECHA_CREACION;
        private String _TLF1;
        private String _TLF2;
        private String _CIUDAD_ID_PK;
        private String _PROVINCIA_ID_PK;
        
        ///Lista de asignaturas q enseña un profesor
            private Dictionary<String, Con_Asignatura> _dAsignaturas;

    }
}
